package com.merry.aop.advisor;

import org.springframework.aop.*;
import org.springframework.aop.Advisor;

/**
 * 这是一个小众的子接口，它的作用是给”类创造一个具有新方法的代理对象“。
 * 在普通的代理方法中，我们都是对原本的方法，进行一些修改。但是这个接口，可以实现“无中生有”。
 * 它可以创造一些新的方法，给代理对象。
 * 该接口所匹配的 Advice是 {@link IntroductionInterceptor} 接口。
 */
public interface IntroductionAdvisor extends Advisor, IntroductionInfo {

    /**
     * 一个类似于{@code Pointcut}的东西。你总得告诉Spring，你要对那些类，进行“无中生有”吧。
     * 注意，这个对方法不起作用。也就是{@link Pointcut#getMethodMatcher()}。而是对{@link Pointcut#getClassFilter()}
     */
    ClassFilter getClassFilter();

    /**
     * 验证的方法。
     */
    void validateInterfaces() throws IllegalArgumentException;

}
